/*
	本链表参考了数据结构（c++版本）对我有很大的帮助！
*/
#include <stdio.h>
#include <stdlib.h>

typedef struct NODE{
	struct NODE *link;
	int id;
} Node;

Node *insert(Node *,int,int);
void setid(Node *,int,int);
int getid(Node *,int);
Node* Locate(Node *,int);
int Length(Node *);

Node *insert(Node *head,int i,int id)
{
	Node *this = Locate(head,i);
	Node *newNode = (Node*)malloc(sizeof(Node));  
	newNode->link = this->link;
	newNode->id=id;
	this->link=newNode;
	return newNode;
}//在第i个节点后插入id节点,i从1开始,o(n)

void setid(Node *head,int i,int id)
{	
	Node *this=Locate(head,i);
	this->id=id;
}//sethead链表第i个节点的id，i从1开始,o(n)

int getid(Node *head,int i)
{	
	if(i<0){ printf("\n Empty memory!"); return 0;}
	return Locate(head,i)->id;
}//获得head链表第i个节点的id，i从0开始,o(n)

Node* Locate(Node *head,int i)
{	
	Node *this=head;int k=0;
	if(i<0) return NULL;
	while(this!=NULL&&k<i){
		this=this->link;
		k++;
	}
	return this;
}//锁定第i个节点的地址，i从0开始,o(n)

int Length(Node *head)
{
	Node *this=head; int k=0;
	while(this!=NULL)
	{
		this=this->link;
		k++;
	}
	return k;	
}//链表的长度,o(n)
